tg-me.com/csharpproglib/5841
Last Update:
🛠 How to: как соблюдать принцип DRY
DRY (Don’t Repeat Yourself) — принцип, согласно которому каждый фрагмент знания должен существовать в системе только в одном месте. Никакого копипаста и дублирующей логики.
Проблема: дублирование валидации
// Пример плохого кода
if (user.Age < 18)
throw new Exception("User must be at least 18");
...
if (user.Age < 18)
return BadRequest("User must be at least 18");
При изменении правила — нужно помнить обновить его везде. Ловушка копипаста.
Решение: вынос логики в общее правило
public static class ValidationRules
{
public static bool IsAdult(User user) => user.Age >= 18;
}
Теперь в коде
if (!ValidationRules.IsAdult(user))
throw new Exception("User must be at least 18");
// И в другом месте:
if (!ValidationRules.IsAdult(user))
return BadRequest("User must be at least 18");
Альтернатива: использование FluentValidation или DataAnnotations
public class User
{
[Range(18, int.MaxValue, ErrorMessage = "User must be at least 18")]
public int Age { get; set; }
}
Где чаще всего нарушают DRY в .NET:
• Повторяющиеся SQL-запросы и фильтры
• Повторение одинаковых exception'ов, логов, сообщений
• Дублирование конфигурации
• UI-формы и компоненты